package cn.itsource.interceptor;

import cn.itsource.domain.User;
import cn.itsource.util.UserContext;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@Component
public class LoginInterceptor implements HandlerInterceptor {

    // 拦截器拦截后返回登录页面的地址
    @Value("${client.login}")
    private String loginPath;

    public boolean preHandle( HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException {
        // 设置相应内容格式
        response.setContentType("text/json;charset=utf-8");

        // 判断是否有type，即判断ajax请求
        String type = request.getParameter("type");
        String token;
        // 如果type为空即ajax请求
        if (StringUtils.isBlank(type)){
            // ajax请求从头部获取令牌
            token = request.getHeader("token");
        }else {
            // 要不然就从参数中获取令牌
            token = request.getParameter("token");
        }

        // 判断令牌是否为空
        if (StringUtils.isBlank(token)){
            // 如果type为空则返回错误信息
            if (StringUtils.isBlank(type)){
                response.getWriter().write("{\"success\": false, \"code\":401}");
            }else {
                // 否侧跳转登录页面
                response.sendRedirect(loginPath);
            }
            // 进行拦截
            return false;
        }

        // 检查令牌是否正确
        User user = UserContext.getUser(token);
        if (user==null){
            // 用户不存在，type为空则返回错误信息
            if (StringUtils.isBlank(type)){
                response.getWriter().write("{\"success\": false, \"code\":401}");
            }else {
                // 跳转登陆页面
                response.sendRedirect(loginPath);
            }
            // 进行拦截
            return false;
        }
        // 通过拦截
        return true;
    }
}
